<!DOCTYPE html>
<html lang="en-us">

<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

  	<meta property="og:title" content=" 我的博客 &middot;  我的博客" />
  	<meta property="og:site_name" content="我的博客" />
  	<meta property="og:url" content="/my_technology/" />
    
    
    <meta property="og:type" content="website" />
    

  <title>
     我的博客 &middot;  我的博客
  </title>

    <meta name="description" content="这里是付佳康的个人博客" />

    <meta name="HandheldFriendly" content="True" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <link rel="shortcut icon" href="/my_technology/images/favicon.ico">
	  <link rel="apple-touch-icon" href="/my_technology/images/apple-touch-icon.png" />
    
    <link rel="stylesheet" type="text/css" href="/my_technology/css/screen.css" />
    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic|Open+Sans:700,400|Inconsolata" />


    
      
          <link href="/my_technology/index.xml" rel="alternate" type="application/rss+xml" title="我的博客" />
      
      
        <link href="/my_technology/index.xml" rel="alternate" type="application/rss+xml" title="我的博客 &middot; 我的博客" />
      
    
    <meta name="generator" content="Hugo 0.68.3" />

    <link rel="canonical" href="/my_technology/" />

     
</head>
<body class="nav-closed">
<div id="particles-js"></div>
  


 <div class="site-wrapper">



<header class="main-header " style="background-image: url(/my_technology/images/user.jpg)">


    

    <nav class="main-nav overlay clearfix">
        
            <a class="blog-logo" href="/my_technology/"><img src="/my_technology/images/user.png" alt="Blog Logo" /></a>
        
        
    </nav>
<div class="vertical">
        <div class="main-header-content inner">
            <h1 class="page-title">
              <a class="btn-bootstrap-2 title-scroll" href="#content">我的博客</a>
          </h1>
          <h2 class="page-description">这里是付佳康的个人博客</h2>
        </div>
</div>
    <a class="scroll-down icon-arrow-left" href="#content"><span class="hidden">Scroll Down</span></a>
</header>

<main id="content" class="content" role="main">
    
    
    
    
    
    

    <div class="extra-pagination inner">
        <nav class="pagination" role="navigation">
	
	    <a class="newer-posts" href="/my_technology/">&larr; Newer Posts</a>
	
	<span class="page-number">Page 2 of 3</span>
	
	    <a class="older-posts" href="/my_technology/page/3/">Older Posts &rarr;</a>
	
</nav>

    </div>

    
        
<article class="post ">
    <header class="post-header">
        <h2 class="post-title"><a href="/my_technology/07/">sql语句实战</a></h2>
    </header>
    <section class="post-excerpt">
      <p>
          <section class="post-content">
            <p><img src="../sql1.png" alt="sql">
<img src="../sql2.png" alt="sql">
<img src="../sql3.png" alt="sql">
<img src="../sql4.png" alt="sql">
<img src="../sql5.png" alt="sql">
<img src="../sql6.png" alt="sql">
<img src="../sql7.png" alt="sql">
<img src="../sql8.png" alt="sql">
<img src="../sql9.png" alt="sql">
<img src="../sql10.png" alt="sql">
<img src="../sql11.png" alt="sql">
<img src="../sql12.png" alt="sql">
<img src="../sql13.png" alt="sql">
<img src="../sql14.png" alt="sql">
<img src="../sql15.png" alt="sql"></p>

          </section>
      </p>
      
    </section>
    <footer class="post-meta">
        
            <img class="author-thumb" src="/my_technology/images/user.png" alt="Author image" nopin="nopin" />
        
        
            付佳康
        
        
        <time class="post-date" datetime="2020-06-07T18:56:47&#43;08:00">
            7 Jun 2020
        </time>
    </footer>
</article>

    
        
<article class="post ">
    <header class="post-header">
        <h2 class="post-title"><a href="/my_technology/06/">APP移动端测试、ADB命令介绍</a></h2>
    </header>
    <section class="post-excerpt">
      <p>
          <section class="post-content">
            <pre><code>重点：
    App测试的内容，
    add命令，
    monkey命令

次重点：
    模拟器的安装（雷电，夜神，android的自带的模拟器使用）
    常规测试
    真机测试
    简单了解云测
    
了解：市场有的移动端的操作系统有？
    1.android 
    2.IOS
    3.微软
    4.塞班
    5.华为(未在市场)

测试范围就是移动端的软件  公司内部一般选择的是真机测试/云测试
    如果应用程序在安卓上进行测试   bug的数量居多
    如果应用程序在ios上测试        bug的数量少很多

移动端的测试内容有：
    1.应用程序的功能测试:
        测试的时间： 移动端的开发结束后   
        测试的依据：  需求文档和ui设计效果图
        测试的内容：    测试页面，测试程序的功能的实现

    2.安装和卸载的测试
        应用程序安装后是否能够正常的运行 以及在安装的过程中是否有问题
        是否能够取消安装，取消后，安装未完成的文件是否清理
        卸载手机后文件是否删除所有对应的文件(log日志，历史记录 文件 安装目录)
        在不同的应用商店  小米市场 安卓市场 应用宝等
    
    3.软件的升级测试
        是否拥有更新提醒，
        是否强制升级以及用户是否可以取消升级
        软件升级后是否重启手机，以及强制关机
            a:在升级的时候是否考虑手机电量的充足
            b:在升级的时候是否考虑下载升级包方式
        是否默认升级(不建议)
    
    4.权限问题测试
        是否用户提醒和同意使用该权限
        6.0以后都是需要申请权限
    
    5.消息推送机制
        a：是否在锁屏的情况下继续推送
        b: 推送是否用户同意 以及用户的使用习惯
        c：推送成功后，用户是否可以精准的打开链接
    
    6.前后的切换的功能
        app在前后台一个正常切换，小窗口的模式
        双系统的切换
        当异常情况下考虑
        有数据交互的情况下
        
    7.兼容性测试
    
    8.网络测试
        考虑到同一个运营商
        2G  3G 4G 5G weifi 弱网测试 无网络的时候
        9.monkey测试压力测试

移动端的性能测试：
    性能测试的指标
    1、内存
    　　2、CPU
    　　3、流量
    　　4、电量
    　　5、启动速度
    　　6、滑动速度、界面切换速度
    　　7、与服务器交互的网络速度 

</code></pre><pre><code>环境变量的配置
1.安装jdk 解析器(傻瓜式一路next)
    安装成功后回在路径 C:\Program Files\Java 
    含有2个子文件夹
    jdk
    jre
</code></pre><p><img src="../jdk%E8%A7%A3%E6%9E%90%E5%99%A8.png" alt="jdk解析器安装后目录"></p>
<pre><code>2.配置的jdk的环境变量
    在黑窗口中输入 java 和javac 能够有命令提醒的说明安装成功
</code></pre><p><img src="../jdk%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E9%85%8D%E7%BD%AE.png" alt="jdk环境变量配置">
<img src="../jdk%E5%8F%98%E9%87%8F%E9%85%8D%E7%BD%AE.png" alt="jdk变量配置"></p>
<pre><code>3.安装和配置SDK
    a.解压sdk的压缩包
    b.双击sdk的 SDKmanger.exe文件(能够出现app的版本为准)
</code></pre><pre><code>4.配置sdk的环境变量
</code></pre><p><img src="../Sdk%E9%85%8D%E7%BD%AE.png" alt="Sdk配置"><br>
<img src="../sdk%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png" alt="Sdk配置"></p>
<pre><code>5.在黑窗口中能够输入 adb 并执行
</code></pre><pre><code>ADB命令的介绍:
    是android的sdk里的一个工具 
    功能：
         运行设备的shell
         管理模拟器的或者是设备的端口映射
         电脑和设备之间的上传和下载的功能
         将本地的apk软件安装到模拟器或者是移动端设备 
    (可有可无)
    配置ADB环境变量
    在环境变量中添加:
        ADB_HOME 
        D:\android-sdk\platform-tools
	
常用的ADB命令:
    1.查看设备  *****
        adb devices
        展示出
        List of devices attached
        emulator-5554   device（设备标识）
        
    2.使用adb命令进行安装软件  
        adb install -r(apk的路径)
        
    3.卸载apk***
        adb uninstall 包名
        adb uninstall -k 包名   (保留配置文件以及缓存文件)
        
    4. 列出所有的包名  ******
        adb shell pm list package
        
    5. 可以列出第三方的报名
        adb shell pm list package -3
        
    6. 可以列出系统应用的报名
        adb shell pm list package -s
        
    7. 查看手机内存的命令
        adb shell dumpsys meminfo 包名
        
    8.录制视频
        adb shell screenrecord /sdcard/demo.mp4
        
    9.截图
        adb shell screencap /sdcard/1907.png
        
    
    查看手机日志 *****
        adb logcat   
            日志级别
            V    Verbose  (最低)
            D    Debug        
            I    Info
            W    Warn        
            E    Error
            F    Fatal  
            S    Silent (supress all output)
            
    10.将日志文件转换为本地文件 
        adb -s emulator-5554(设备名称) logcat -v time process &gt;d:log.txt(文件存放位置)
    
    11.根据日志级别打印  ****
        adb logcat *：w(大于和等于这个级别的)
</code></pre>
          </section>
      </p>
      
    </section>
    <footer class="post-meta">
        
            <img class="author-thumb" src="/my_technology/images/user.png" alt="Author image" nopin="nopin" />
        
        
            付佳康
        
        
        <time class="post-date" datetime="2020-06-04T09:55:31&#43;08:00">
            4 Jun 2020
        </time>
    </footer>
</article>

    
        
<article class="post ">
    <header class="post-header">
        <h2 class="post-title"><a href="/my_technology/05/">sql语句（补充）</a></h2>
    </header>
    <section class="post-excerpt">
      <p>
          <section class="post-content">
            <pre><code>练习sql语句：
</code></pre><p><img src="../sql01.png" alt="sql">
<img src="../sql02.png" alt="sql"></p>
<pre><code>表单中sql语句公式：
    select * from 表名  ： 
        查找表内所有数据， * 代表所有
        
    where 具体条件 :
        where作位查询sql语句条件， 
        例 select * from 表名 where 字段名=指定值
        
    order by 升降序：
        与desc和asc使用,通常以int类型字段进行升序或降序排列， 
        例 select * from 表名 order by 字段名 desc/asc
        
    group by 分组：
        可以理解为对同一个班的N个学生进行整合,查看每个班级下的人数， 
        例  select 字段名，count(*) from 表名 group by 字段名
        
    having 分组后的条件:
        在分组时外加条件,两个以上分组数据， 
        例  select 字段名，count(*) from 表名 group by 字段名 having 字段名 &gt;=2
    
    limit  分页：
        将所有数据按每页显示的条目数进行分页，数据库中以下标方式显示数据，第一个数据下标为0；
        limit n,m 关键字 ：
            n代表从下标为n的数据进行显示，
            m代表每页显示多少条数据，
            例  select * from 表名 limit 0,2
    
    inner join 内连接查询：
        其实就是两张表中的数据，通过某个字段相对，查询出相关记录数据， 
        例  select * from 表1 inner join 表2 on 表1.字段=表2.字段
    
    left join 左外连接查询：
        会把左边表里面的所有数据取出来，而右边表中的数据，如有相等的，就显示出来，如果没有，就会补null，
        例  select * from 表1 left join 表2 on 表1.字段=表2.字段
    
    right join 右外连接查询:
        返回右表的全部行和左表满足ON条件的行，如果右表的行在左表中没有匹配，那么这一行左表中对应数据用NULL代替,
        例  select * from 表1 right join 表2 on 表1.字段=表2.字段
    
    full outer join  全连接查询：
        从左表和右表那里返回所有的行。如果其中一个表的数据行在另一个表中没有匹配的行，那么对面的数据用NULL代替，
        例  select * from 表1 full outer join 表2 on 表1.字段=表2.字段
    
    avg  平均值：
        用来取总数的平均结果，  
        例  select avg(字段名) from 表名
    
    max  最大值：
        查询数据中最大的数据，  
        例  select max(字段名) from 表名
    
    min  最小值:
        查询数据中最小的数据，  
        例  select min(字段名) from 表名
    
    count 总数:
        查询当前表内有多少条数据，
        例 select count(*) from 表名
    
    sum 求和：
        对当前字段下的数字进行求和，  
        例 select sum(字段名) from 表名
    
    as  别名：
        给当前表名起别名， 
        例 select sum(字段名) as 表别名 from 表名  
</code></pre>
          </section>
      </p>
      
    </section>
    <footer class="post-meta">
        
            <img class="author-thumb" src="/my_technology/images/user.png" alt="Author image" nopin="nopin" />
        
        
            付佳康
        
        
        <time class="post-date" datetime="2020-06-03T21:14:10&#43;08:00">
            3 Jun 2020
        </time>
    </footer>
</article>

    
        
<article class="post ">
    <header class="post-header">
        <h2 class="post-title"><a href="/my_technology/04/">Mysql及sql语句</a></h2>
    </header>
    <section class="post-excerpt">
      <p>
          <section class="post-content">
            <pre><code>sql语句操作：
</code></pre><p><img src="../%E4%B9%A6%E7%B1%8D.png" alt="书籍">
<img src="../%E5%91%98%E5%B7%A5.png" alt="员工"></p>
<pre><code>数据类型：
    数字类型：int long double float 
    
    时间类型：time datetime  year  timestamp
    
    文本类型：text
    
    对货币类型：Decimal Numric 
    
    字符类型：char  varchar  (固定字节数   自动去识别字节数达到少占资源)
    
    枚举类型：enum
    
数据类型的约束条件
    primary key  主键 都是自增
    
    auto_increment  自增
    
    unique   唯一
    
    not null  不能为空
    
    defualt   默认值

比较运算符:
    &gt;  
    &lt;   
    &gt;=   
    &lt;=   
    !=  
    =

逻辑运算符:
    and  和
    or  或
    not  不

查询：
    模糊查询 like:
        select * from student where name like 'A%';  %表示任意多个任意字符
        select * from student where name like &quot;A_&quot;;  _表示一个任意字符
    
    范围查询 in 和 between  and :
        select * from 表名 where id in (1,5,7);  结果输出ID为1，5，7的数据
        select * from 表名 where id between 1 and 3;  结果输出ID为1，2，3的数据
    

Mysql命令：
    创建数据库： create database 库名 character set utf8
    查看所有数据库： show databases；
    查看所有表： show tables；
    创建表的格式： create table 表名 （字段名 类型（int、str等） 属性约束）；
    删除库： drop database 库名；
    删除表： drop table 表名；
    查看表结构： desc 表名；
    查看创建表的sql语句： show CREATE table 表名；
    查询表内容： select * from 表名；
    查看当前时间： select now（）；
    查看mysql版本： select version（）；
    修改MySQL密码： update mysql.user set password=password('密码') where user='要修改的用户名';
    添加数据： insert into 表名（'字段名'） values（'对应字段名数据'）；
    添加新的字段： alter table 表名 add 字段名 字段类型 字段属性约束；
    修改创建好的表字段： alter table 表名 change 原字段名 新字段名 字段类型 字段属性约束；
    修改表名： alter table 表名 rename to 新表名；
    修改主键： alter table 表名 change 原字段名 新字段名 字段类型 字段属性约束；
    修改数据： update 表名 set 字段名=值 where 条件（id=1...）
    删除主键： alter table 表名 drop 主键字段名；
    删除表内所有数据： delete from 表名；
    删除指定数据： delete from 表名 where 字段=字段名；
    降序： select * from 表名 where 字段名（数字类型） order by 字段名 desc 
    升序： select * from 表名 where 字段名（数字类型）order by 字段名 asc
    
    
    
    

</code></pre>
          </section>
      </p>
      
    </section>
    <footer class="post-meta">
        
            <img class="author-thumb" src="/my_technology/images/user.png" alt="Author image" nopin="nopin" />
        
        
            付佳康
        
        
        <time class="post-date" datetime="2020-06-02T14:21:16&#43;08:00">
            2 Jun 2020
        </time>
    </footer>
</article>

    
        
<article class="post ">
    <header class="post-header">
        <h2 class="post-title"><a href="/my_technology/03/">软件缺陷总类、缺陷报告</a></h2>
    </header>
    <section class="post-excerpt">
      <p>
          <section class="post-content">
            <pre><code>我的缺陷报告示图：
</code></pre><p><img src="../%E6%88%91%E7%9A%84%E7%BC%BA%E9%99%B7%E6%8A%A5%E5%91%8A.png" alt="缺陷报告"></p>
<pre><code>软件缺陷的定义：
    软件缺陷，常常又被叫做Bug，从产品内部看，缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题；
    从产品外部看，缺陷是系统所需要实现的某种功能的失效或违背。


软件缺陷的种类划分:
    1、功能不正常
    2、软件在使用上感觉不方便
    3、软件的结构未做良好规划
    4、提供的功能不充分
    5、与软件操作者的互动不良
    6、使用性能不佳
    7、为做好错误处理
    8、边界错误
    9、计算错误
    10、使用一段时间所产生的错误
    11、控制流程的错误
    12、在大数据量压力下所产生的错误
    13、在不同硬件环境下产生的错误
    14、版本控制不良导致的错误
    15、软件文档的错误
    
    
 软件缺陷按照严重程度分为五种：
    1.系统崩溃
    2.严重
    3.一般
    4.次要
    5.建议
    
    
 软件缺陷按照优先级分为三种，修正由高到低：
    1.高
    2.中
    3.低
    
    
软件缺陷按照Bug分为六级：
    1级，系统崩溃：
        定义：严重阻碍测试和开发工作
        对应优先级：最高
        具体可分为：
            1.功能完全没有实现
            2.应用闪退/崩溃无法运行
            3.应用必现安全模式，无法运行
            4.其他导致功能无法测试的问题
            
    2级，至关重要：
        定义：非阻碍用例执行的严重问题
        对应优先级：高
        具体可分为：
            1.简单操作应用闪退/崩溃，卡死
            2.数据丢失
            3.严重影响系统，自身功能无法运行
            4.严重数值计算错误
            5.数据库损坏或无法保存配置
            6.安全性问题（包括数据加密等）
    
    3级，主要：
        定义：功能存在缺陷，但不影响应用和系统的稳定性
        对应优先级：中
        具体可分为：
            1.内存泄露（长时间不用的对象需要被回收，不被回收占内存）
            2.功能实现逻辑覆盖不全面
            3.非必现，但复现概率超过50%的闪退/崩溃和安全模式
            
    4级，一般：
        定义：对应用熟悉度高才能感知到的问题，对应用基本功能实现无影响
        对应优先级：中
        具体可分为：
        1.轻微数值计算错误
        2.功能实现有误，与产品文档不完全贴切
        3.用户简单操作，即可明显感知的UI问题
            
    5级，较小：
        定义：界面，性能缺陷
        对应优先级：低
        具体可分为：
            1.操作界面错误（提示显示规则，刷新规则是否与文档一致）
            2.边界条件显示错误  　 　 　
            3.提示信息和界面效果展示错误（包括未给出信息、信息提示错误等） 
            4.复现率低于5%的闪退/崩溃和安全模式  　 　 　
            5.插件兼容和性能未优化问题  　 　 　
            6.非正常操作导致UI显示异常
            
    6级，建议：
        定义：对于产品的意见或者建议
        对应优先级：低
        具体可分为：
            1.对于产品设计方面的意见和建议
            2.对于产品界面优化方面的意见和建议
            3.对于产品需要优化增强用户体验方面的意见和建议        
    

软件缺陷按照测试种类6分：
    逻辑功能类
    性能类
    界面类
    易用性类
    安装
    兼容性类


软件缺陷按照功能模块分:
    注册
    登录
    购物车
    分类
    订单
    个人信息


软件缺陷类型：
    系统缺陷：
        1、程序死循环
        2 程序错误，不能执行正常工作或重要功能，使系统崩溃或资源不足
        
    数据缺陷：
        1 数据计算错误
        2 数据约束错误
        3 数据输入、输出错误
        
    数据库缺陷：
        1 数据库发生死锁
        2 数据库的表、缺省值未加约束条件
        3 数据库连接错误
        4 数据库的表有过多的空字
    
    接口缺陷：
        1 数据通信错误
        2 程序接口错误
        
    功能缺陷：
        1 功能无法实现 
        2 功能实现错误
    
    安全性缺陷：
        1 用户权限无法实现
        2 超出限制错误
        3 访问控制错误
        4 加密错误
    
    兼容性缺陷：
        与需求规定配置兼容性不配合
        
    性能缺陷：
        1 未达到预期的性能目标
        2 性能测试中出错，导致无法进行测试
        
    界面缺陷：
        1 操作界面错误
        2 打印内容，格式错误
        3 删除操作未给出提示
        4 长时间操作未给出提示
        5 界面不规范
        
    建议（建议性的改进）：
        1 功能建议
        2 操作建议
    
   
对BUG解决方案的七种描述：
    无效的Bug：
        By Design （说明：设计需求就是这样设计）
        Duplicate (说明：这个问题别人已经发现)
        Not Repro (说明：无法修复的问题)
    
    有效的Bug：
        Fixed (说明：问题被修复)
        External （说明：外部造成的原因，如浏览器、操作系统）
        Postponed （说明：发现的太晚，下一版本讨论是否解决）
        Won’t Fix （说明：是个问题，但不值得修复）
    

Bug的生命周期：
    新建:
        测试员发现Bug并提交，我们将状态标注为新建
        
    确认：
        开发人员接受该Bug，将Bug状态修改为已分配（Assigned），表示已经认可并确认
        
    解决：
        开发人员解决Bug后，将Bug状态修改为解决，并发送给色是人员回归测试
        
    重新验证：
        测试人员对Bug进行回归测试
        
    关闭：
        测试人员确认解决Bug后，将Bug的状态修改为关闭，否则发送给开发人员重新修改
        
    重新打开：
        旧版本关闭的Bug再新版本重新出现，测试人员需要将其状态修改为重新打开

    
缺陷报告的组成与提交：
</code></pre><p><img src="../%E7%BC%BA%E9%99%B7%E6%8A%A5%E5%91%8A%E7%BB%84%E6%88%90.png" alt="缺陷报告组成">
<img src="../%E6%8F%90%E4%BA%A4%E7%BC%BA%E9%99%B7%E6%8A%A5%E5%91%8A.png" alt="提交缺陷报告"></p>
<pre><code>Bug处理流程图：
</code></pre><p><img src="../Bug%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B%E5%9B%BE.png" alt="BUG"></p>
<pre><code>测试用例执行和故障管理流程图:
</code></pre><p><img src="../%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E6%89%A7%E8%A1%8C%E5%92%8C%E7%AE%A1%E7%90%86.png" alt="流程图"></p>

          </section>
      </p>
      
    </section>
    <footer class="post-meta">
        
            <img class="author-thumb" src="/my_technology/images/user.png" alt="Author image" nopin="nopin" />
        
        
            付佳康
        
        
        <time class="post-date" datetime="2020-06-01T19:37:02&#43;08:00">
            1 Jun 2020
        </time>
    </footer>
</article>

    
        
<article class="post ">
    <header class="post-header">
        <h2 class="post-title"><a href="/my_technology/02/">测试计划和测试用例以及测试方法(测试策略)</a></h2>
    </header>
    <section class="post-excerpt">
      <p>
          <section class="post-content">
            <p><img src="../1.png" alt="测试用例">
<img src="../2.png" alt="测试用例">
<img src="../3.png" alt="测试用例"></p>
<pre><code>测试用例定义:
	执行测试的依据，将测试的操作步骤进行以文档的方式记录下来
	
测试用例的格式  :
    测试用例的模块: 操作软件的一个大的菜单   命名以模块名称为主
    测试用例的编号: 命名以菜单下具体功能——数字   
    测试输入: 对具体的功能操作步骤   
    执行条件: 操作的先决条件
    预期结果: 是以需求文档上的内容为准
    实际结果: 依据测试数据的内容输出后得到的结果可能与预期一直或是不一致
  
测试用例的文档方式2种:
    exl 表格的方式
    word文档方式

测试用例的特性:
    代表性：能够代表并覆盖各种合理的和不合理、合法的和不合法的、边界的和越界的以及极限的输入数据、操作等。
    针对性：对程序中的可能存在的错误有针对性地测试
    可判定性：测试执行结果的正确性是可判定的，每一个测试用例都应有相应的期望结果
    可重现性：对同样的测试用例，系统的执行结果应当是相同的。


软件的分类:
    OA: 办公自动化  
    crm: 客户管理系统
    电商项目
    ERP: 进销存系统
</code></pre><pre><code>测试方法/测试策略:
    1.等价类划分:
        概念：有效，无效
            1.等价类划分是指分步骤地把海量（无限）的测试用例集减得很小，但过程同样有效。
            2.等价类 ：
                何为等价类，某个输入域的集合，在这个集合中每个输入条件都是等效的。
                一般可分为有效等价类和无效等价类
                
                等价类划分为：
                    有效等价类：指符合《需求规格说明书》，输入合理的数据集合
                    无效等价类：指不符合《需求规格说明书》，输入不合理的数据集合
            
	2.边界值：
	    概念：
	        即使最简单的程序要处理的数据量也可能极大，使这些数据得以测试的技巧是，
	        根据一些关键的原则进行等价类的划分，以合理减少测试用例，
	        这些关键的原则是：边界条件，次边界条件、空值和无效数据。
	        
	    确定边界值的方法：
            1.确定边界情况（输入或输出等价类的边界）
            2.选取正好等于、刚刚大于或刚刚小于边界值作为测试数据
            
            边界值不是从每个等价类中挑一个作为代表，而是把每个等价类的边界都进行测试。
	
	3.因果图法
	    概念：
	        因果图法比较适合输入条件比较多的情况，测试所有的输入条件的排列组合。
	        所谓的原因就是输入，所谓的结果就是输出。
	        
        因果图基本图形符号：
            恒等：若原因出现，则结果出现；若原因不出现，则结果不出现。
            非（～）：若原因出现，则结果不出现；若原因不出现，则结果出现。
            或（∨）：若几个原因中有一个出现，则结果出现；若几个原因都不出现，则结果不出现。
            与（∧）：若几个原因都出现，结果才出现；若其中有一个原因不出现，则结果不出现。

        因果图的约束符号:
            E（互斥）：表示两个原因不会同时成立，两个中最多有一个可能成立
            I（包含）：表示三个原因中至少有一个必须成立
            O（惟一）：表示两个原因中必须有一个，且仅有一个成立
            R（要求）：表示两个原因，a出现时，b也必须出现，a出现时，b不可能不出现
            M（屏蔽）：两个结果，a为1时，b必须是0，当a为0时，b值不定
</code></pre><p><img src="../%E5%9B%A0%E6%9E%9C%E5%9B%BE%E7%AC%A6%E5%8F%B7.png" alt="因果图基本图形符号">
<img src="../%E5%9B%A0%E6%9E%9C%E7%BA%A6%E6%9D%9F.png" alt="因果图约束符号"></p>
<pre><code>	4.正交法：
	    1.正交实验法就是利用排列整齐的表 -正交表来对试验进行整体设计、综合比较、统计分析，实现通过少数的实验次数找到较好的生产条件，
	    以达到最高生产工艺效果，这种试验设计法是从大量的试验点中挑选适量的具有代表性的点，利用已经造好的表格—正交表来安排试验并进行数据分析的方法。
	    
	    2.正交表能够在因素变化范围内均衡抽样，使每次试验都具有较强的代表性，由于正交表具备均衡分散的特点，保证了全面实验的某些要求，这些试验往往能够较好或更好的达到实验的目的。
	    
	    3.正交实验设计包括两部分内容：
	        第一，是怎样安排实验；
	        第二，是怎样分析实验结果。
	        
        正交表测试用例设计方法的特点是什么？
            1、用最少的实验覆盖最多的操作，测试用例设计很少，效率高，但是很复杂；
            2、对于基本的验证功能，以及二次集成引起的缺陷，一般都能找出来；但是更深的缺陷，更复杂的缺陷，还是无能为力的；
            3、体的环境下，正交表一般都很难做的。大多数，只在系统测试的时候使用此方法。
	        
        应用场景：
            在一个界面中有多个控件，每个控件有多个取值，控件之间可以相互组合，不可能（也没有必要）为每一种组合编写一条用例，如何使用最少最优的组合进行测试。——正交排列法
	    
            判定表，因果图也是考虑控件组合，但是组合数量较少（一般不会超过20中）
            公式：Ln(mk)
            k是表的列数，表示控件的个数（因数个数）
            m是每个控件的取值个数（因数水平）
            n是表的行数，也就是需要测试组合的次数
            正交表查询地址：https://www.york.ac.uk/depts/maths/tables/orthogonal.htm
            正交排列法：http://support.sas.com/techsup/technote/ts723_Designs.txt
	
	5.场景法：
	    测试用例设计的思想：
	        用事件触发来控制流程的，事件触发时的情景便形成了场景，而同一事件不同的触发顺序和处理结果就形成事件流。
	        可以比较生动地描绘出事件触发时的情景，有利于测试设计者设计测试用例，同时使测试用例更容易理解和执行。
	        用例场景是通过描述流经用例的路径来确定的过程，
            这个流经过程要从用例开始到结束遍历其中所有基本流和备选流。
</code></pre><p><img src="../%E5%9C%BA%E6%99%AF%E6%B3%95.png" alt="场景法"></p>
<pre><code>	6.错误推断法：
	    错误猜测法是测试经验丰富的人喜欢使用的一种测试用例设计方法。
        一般这种方法是基于经验和直觉推测程序中可能发送的各种错误，有针对性地设计。只能作为一种补充。
	        技巧：
	            最重要的是要思考和分析测试对象的各个方面，多参考以前发现的bug的相关数据，总结的经验，个人多考虑异常的情况、
	            反面的情况、特殊的输入，以一个攻击者的态度对待程序，就能设计出比较完善的测试用例来。
	    
	测试用例的输入类型：  
	    字母  
	    数字  
	    特殊符号 
	    空字符  
	    汉字

    编写任意测试用例的时候3步骤走：
        1.根据需求提取测试用例的测试点
        2.根据测试点内容输入不同数据类型
        3.得到不用结果用来编写测试用例
	
测试用例评审和变更步骤与评审面试题:
    测试评审的标准：
		1.测试用例的正确性测试用例不含有争议（测试用例本身的描述是否清晰，是否存在二义性）
		2.测试用例是否冗余（是否考虑到测试用例的执行效率.往往测试用例中步骤不断重复执行，验证点却不同，而且测试设计的冗余性，都造成了效率的低下）
		3.测试用例的覆盖率（是否针对需求跟踪矩阵，覆盖了所有的软件需求）
		4.测试用例是否满足需求文档（是否完全遵守了软件需求的规定。这并不一定的，因为即使再严格的评审，也会出现错误，应具体情况具体对待）
		
    1、需要评审的原因：
        测试用例是软件测试的准则，但它并不是一经编制完成就成为准则。
        由于用例开发人员的设计经验和对需求理解的深度各不相同，所以用例的质量难免会有不同程度的差异。
		
    2、进行评审的时机：
        两个时间点：
            第一，是在用例的初步设计完成之后进行评审。
            第二，是在整个详细用例全部完成之后进行二次评审。如果项目时间比较紧张，尽可能保证对用例设计进行评审，提前发现其中的不足之处。
		
    3、参与评审人员：
        这里会分为多个级别进行评审。 
        1.部门评审，测试部门全体成员参与的评审。 
        2.公司评审，这里包括了项目经理、需求分析人员、架构设计人员、开发人员和测试人员。 
        3.客户评审，包括了客户方的开发人员和测试人员。这种情况在外包公司比较常见。 
		
    4、评审内容 :
        评审的内容有以下几个方面 
        1)用例设计的结构安排是否清晰、合理，是否利于高效对需求进行覆盖。 
        2)优先极安排是否合理。 
        3)是否覆盖测试需求上的所有功能点。 
        4)用例是否具有很好可执行性。例如用例的前提条件、执行步骤、输入数据和期待结果是否清晰、正确期待结果是否有明显的验证方法。
        5)是否已经删除了冗余的用例。 
        6)是否包含充分的负面测试用例。充分的定义，如果在这里使用2&amp;8法则，那就是4倍于正面用例的数量，毕竟一个健壮的软件，其中80%的代码都是在&quot;保护&quot;20%的功能实现。 
        7)是否从用户层面来设计用户使用场景和使用流程的测试用例。 
        8)是否简洁，复用性强。例如，可将重复度高的步骤或过程抽取出来定义为一些可复用标准步骤
        
        附加：一个&quot;健康&quot;的测试用例至少要通过前5个标准	
        
    5、评审的方式:
        1.召开评审会议。与会者在设计人员讲解之后给出意见和建议，同时进行详细的评审记录。 
        2.通用邮件与相关人员沟通。
        3.通用IM工具直接与相关人员交流 。
            （方式只是手段，得到其它人员对于用例的反馈信息才是目的。 
            无论采用那种方式，都应该在沟通之前把用例设计的相关文档发送给对方进行前期的学习和了解，以节省沟通成本。 ）

    6、评审结束标准
        在评审活动中会收集到用例的反馈信息，在此基础上进行用例更新，直到通过评审。
</code></pre><p><img src="../%E8%AF%84%E5%AE%A1%E6%A3%80%E6%9F%A5%E9%A1%B91.png" alt="评审检查项">
<img src="../%E8%AF%84%E5%AE%A1%E6%A3%80%E6%9F%A5%E9%A1%B92.png" alt="评审检查项"></p>

          </section>
      </p>
      
    </section>
    <footer class="post-meta">
        
            <img class="author-thumb" src="/my_technology/images/user.png" alt="Author image" nopin="nopin" />
        
        
            付佳康
        
        
        <time class="post-date" datetime="2020-05-29T21:27:19&#43;08:00">
            29 May 2020
        </time>
    </footer>
</article>

    
        
<article class="post ">
    <header class="post-header">
        <h2 class="post-title"><a href="/my_technology/01/">测试基础</a></h2>
    </header>
    <section class="post-excerpt">
      <p>
          <section class="post-content">
            <pre><code>

问题：
    1.软件开发的生命周期：
        a.客户提出需求(概念)
        b.根据客户的需求写出相对的&lt;&lt;需求文档&gt;&gt; 
        c.前端设计效果图(原型图) 
        后台开发人员设计与编写代码实现功能
        测试人员也会根据需求文档编写测试计划和测试用例
        d.在后台开发实现功能后根据测试用例测试人员进行测试。
        e.开发完全结束后测试人员进行整体测试，全面测试。测试成功后进入上线
        f.软件上线后根据用户体验和实际效果进行小版本的迭代。


    2. 软件缺陷产生的原因种类：
        1.需求变更次数频繁  理解误差   产品或者是客户
        2.开发和设计 代码问题  开发人员
        3.运维  资源使用率产生  公司问题


    3. 测试流程：
        1.在立项会上根据客户需求编写需求文档/规格说明书，ui设计原型图后台编码，测试人员编写测试计划和测试用例
        2.随着开发的代码实现测试进行测试评审
        3.主要代码实现后测试人员先进行冒烟测试
        4.代码实现后测试执行测试用例
        5.根据执行的结果进行对应bug提交给相对应的开发人员让其修改代码
        6.开发修改后测试人员进行回归测试
        7.直至项目上线后 测试人员编写测试总结用于下一个版本的迭代


        **冒烟测试：  在这个软件中主要的功能实现后进行测试
        **回归测试：  在开发人员修改后进行的同一个问题的测试
        **随机测试：  


    4.软件测试分类：
        1.按阶段划分：
            a.单元测试    对一个模块测试   
            b.集成测试    对多个模块测试(有一定的关联)
            c.系统测试    在软件编译后执行的整体测试
            d.验收测试    对软件执行后的用户体验的测试  
                    α 阿尔法测试   有一定的开发测试人员的测试   内测  
                    β 贝塔测试     只有用户参与的测试           公测


            2.按是否运行程序划分;
                a.静态测试     UI设计图  
                b.动态测试     有执行代码过程中产生的问题


            3.是否查看源代码方式划分;
                a.黑盒测试    不看源代码结构 只关心外观和能否输入输出以及响应时间
                    功能测试:界面 安装 兼容 易用 
                    性能测试:压力测试  负载测试  一般性能 稳定性测试
                        压力测试   在同一时间内进行多个用户的访问
                        负载测试   在多个用户在一段时间的持续访问

                b.白盒测试     只看代码结构以及代码实现方式
                c.灰盒测试     介于黑盒和白盒之间一种


    5.面试题：   对任意物品的测试
        回答思路：   
            1.功能上   体积 形状 用途 材质 
            2.界面上   颜色  图案
            3.性能上
            4.易用性
            5.安全性


    6.软件测试的原则
        1.尽早原则
        2.考虑意外情况和极端情况发生
        3.群集现象
        4.测出问题能够复现问题
        5.回归测试的关联性 
        6.善于总结相关文档 


    7.面试题：
        如果在测试过程中出现的bug 而开发人员不认为是bug的时候你怎么办？
        回答思路：
                自我
                别人
                领导
            1.首先我会从自身去经过多次的测试发现bug的出现次数和频率,记录复现bug的方式，然后发送给开发人员
            2.再根据需求文档来确认是否未bug
            3.如果开发不认为是bug的 将复现bug的记录和需求文档找产品经理进行商议由产品经理和项目来确认是否bug
            4.如果项目经理和产品经理都不认为是Bug 我会将bug记录在测试文档中，方便在下次评审会上将问题再次抛出


    8.软件测试开发模式常见的为
        V型
        WW型
        H型
        螺旋型


    9.公司的组织架构：
        一般在公司内部有的部门：  人事  财务  开发(前端 后台  移动端 测试)  市场(产品)  运维（产品维护的服务）
        开发，测试   1个测试对应5个开发 1个前端 3个后台 1个移动端
        ceo	   首席执行官
        CTO    首席技术执行官
        CFO	   首席财务执行官
        COO	   首席运营执行官
        UI
        ANDROID
        IOS
        QA 
        TS  
        DBA
        UE
        RD
            总监
            项目经理：pm
                组长：
                组员：
            产品经理：


    10 测试工具;
        World文档   测试计划  测试用例 缺陷报告
        接口工具    charles Fiddler   postman
        性能工具    Jmeter Loadrunner
        bug管理工具 禅道 QTP 
        自动化管理工具  selenium  appnium  untest  pytest  
        云测工具  Testing

</code></pre>
          </section>
      </p>
      
    </section>
    <footer class="post-meta">
        
            <img class="author-thumb" src="/my_technology/images/user.png" alt="Author image" nopin="nopin" />
        
        
            付佳康
        
        
        <time class="post-date" datetime="2020-05-28T18:01:36&#43;08:00">
            28 May 2020
        </time>
    </footer>
</article>

    
        
<article class="post ">
    <header class="post-header">
        <h2 class="post-title"><a href="/my_technology/f/">中间件的方法</a></h2>
    </header>
    <section class="post-excerpt">
      <p>
          <section class="post-content">
            <pre><code>
什么是中间件 中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统，用于在全局范围内改变Django的输入和输出。每个中间件组件负责做一些特定的功能。

中间件的五种方法

process_request

    1.执行时间：在视图函数之前，在路由匹配之前
    2.参数：
      request：请求对象，与视图中用到的request参数是同一个对象
    3.返回值：
      None：按照正常的流程走
      HttpResponse：接着倒序执行当前中间件的以及之前执行过的中间件的process_response方法，不再执行其它的所有方法
    4.执行顺序：按照MIDDLEWARE中的注册的顺序执行，也就是此列表的索引值
process_response

    1.执行时间：最后执行
    2.参数：
      request：请求对象，与视图中用到的request参数是同一个对象
      response：响应对象，与视图中返回的response是同一个对象
    4.返回值：
      response：必须返回此对象，按照正常的流程走
    5.执行顺序：按照注册的顺序倒序执行
process_view

    1.执行时间：在process_request方法及路由匹配之后，视图之前
      参数：
      request：请求对象，与视图中用到的request参数是同一个对象
      view_func：将要执行的视图函数（它是实际的函数对象，而不是函数的名称作为字符串）
      view_args：url路径中将传递给视图的位置参数的元组
      view_kwargs：url路径中将传递给视图的关键值参数的字典
    2.返回值：
      None：按照正常的流程走
      HttpResponse：它之后的中间件的process_view，及视图不执行，执行所有中间件的process_response方法
    3.执行顺序：按照注册的顺序执行
process_template_response 此方法必须在视图函数返回的对象有一个render()方法（或者表明该对象是一个TemplateResponse对象或等价方法）时，才被执行

    1.执行时间：视图之后，process_exception之前
    2.参数：
      request：请求对象，与视图中用到的request参数是同一个对象
      response：是TemplateResponse对象（由视图函数或者中间件产生）
    3.返回值：
      response：必须返回此对象，按照正常的流程走
    4.执行顺序：按照注册的顺序倒序执行
process_exception 此方法只在视图中触发异常时才被执行.

    1.执行时间：视图之后，process_response之前
    2.参数：
      request：请求对象，与视图中用到的request参数是同一个对象
      exception：视图函数异常产生的Exception对象
    3.返回值：
      None：按照正常的流程走
      HttpResponse对象：不再执行后面的process_exception方法
    4.执行顺序：按照注册的顺序倒序执行


</code></pre>
          </section>
      </p>
      
    </section>
    <footer class="post-meta">
        
            <img class="author-thumb" src="/my_technology/images/user.png" alt="Author image" nopin="nopin" />
        
        
            付佳康
        
        
        <time class="post-date" datetime="2020-05-11T21:22:28&#43;08:00">
            11 May 2020
        </time>
    </footer>
</article>

    
        
<article class="post ">
    <header class="post-header">
        <h2 class="post-title"><a href="/my_technology/wenzishibie/">百度云技术--文字识别</a></h2>
    </header>
    <section class="post-excerpt">
      <p>
          <section class="post-content">
            <pre><code># 导包
import requests
import base64
import urllib

# 获取token
res = requests.get('https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&amp;client_id=4jvGHt81mnZ48nnGH0lwT0bG&amp;client_secret=72YiaT9GX0wwWfMUGSDl8FdUfP7Y1Sg4')

# print(res.json())

token = res.json()['access_token']
# print(token)

# 开始智能识图
# 接口地址
url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token='+token
# 定义头部信息
myheaders = {'Content-Type': 'application/x-www-form-urlencoded'}

# 操作图片
# 读取图片
myimg = open('./code.png', 'rb')
temp_img = myimg.read()
# 关闭图片
myimg.close()

# 进行base64编码
temp_data = {'image': base64.b64encode(temp_img)}

# 对图片地址进行urlencode操作
temp_data = urllib.parse.urlencode(temp_data)

# 请求识图接口
res = requests.post(url=url, data=temp_data, headers=myheaders)
print(res.json())
code = res.json()['words_result'][0]['words']

code = str(code).replace(' ', '')
print(code)

</code></pre>
          </section>
      </p>
      
    </section>
    <footer class="post-meta">
        
            <img class="author-thumb" src="/my_technology/images/user.png" alt="Author image" nopin="nopin" />
        
        
            付佳康
        
        
        <time class="post-date" datetime="2020-05-09T21:22:28&#43;08:00">
            9 May 2020
        </time>
    </footer>
</article>

    
        
<article class="post ">
    <header class="post-header">
        <h2 class="post-title"><a href="/my_technology/docker/">Docker基础命令</a></h2>
    </header>
    <section class="post-excerpt">
      <p>
          <section class="post-content">
            <pre><code>Docker命令：

    docker images  --查看镜像

    docker version  --显示当前版本号 -v

    docker info  --显示全部信息（系统，镜像，容器）

    docker pull 镜像名  --下载镜像

    docker rmi -f 镜像ID  --删除单个镜像

    docker rmi -f$(docker images -qa)  --删除全部

    docker save -o '路径.tar' 镜像名称  --导出镜像 

    docker load -i '路径.tar'  --导入镜像

    docker ps  --查看容器列表

    docker run -p 6380:6379 redis redis-server  --启动服务 

    docker stop 容器  --停止容器

    docker rm $(docker ps -a -q) --删除已退出的所有容器

    exit  --退出docker

</code></pre>
          </section>
      </p>
      
    </section>
    <footer class="post-meta">
        
            <img class="author-thumb" src="/my_technology/images/user.png" alt="Author image" nopin="nopin" />
        
        
            付佳康
        
        
        <time class="post-date" datetime="2020-05-06T21:22:28&#43;08:00">
            6 May 2020
        </time>
    </footer>
</article>

    

    <nav class="pagination" role="navigation">
	
	    <a class="newer-posts" href="/my_technology/">&larr; Newer Posts</a>
	
	<span class="page-number">Page 2 of 3</span>
	
	    <a class="older-posts" href="/my_technology/page/3/">Older Posts &rarr;</a>
	
</nav>


</main>

    <footer class="site-footer clearfix">
        <section class="copyright"><a href="">我的博客</a> </section>
        
        <section class="poweredby">Proudly generated by <a class="icon-hugo" href="https://gohugo.io">HUGO</a>, with <a class="icon-theme" href="https://github.com/syui/hugo-theme-air">hugo-theme-air</a> theme</section>
        
    </footer>
    </div>
    <script type="text/javascript" src="/my_technology/js/jquery.js"></script>
    <script type="text/javascript" src="/my_technology/js/jquery.fitvids.js"></script>
    <script type="text/javascript" src="/my_technology/js/index.js"></script>
    <script src="/my_technology/js/particles.min.js"></script>
    <script src="/my_technology/js/particles.js"></script>  

</body>
</html>

